#ifndef _VECTOR3_H_
#define _VECTOR3_H_

class Vector3
{
public:
	Vector3(void);
	Vector3(double x, double y, double z);
	Vector3(Vector3* v);
	~Vector3(void);

	double length();
	double lengthSquared();
	Vector3* negate();
	Vector3* negate(Vector3* dest);
	Vector3* normalize();
	Vector3* normalize(Vector3* dest);
	Vector3* set(double x, double y, double z);
	Vector3* set(Vector3 v);

	static Vector3* add(Vector3 v1, Vector3 v2, Vector3* dest);
	static Vector3* sub(Vector3 v1, Vector3 v2, Vector3* dest);
	static Vector3* scale(Vector3 v, double s, Vector3* dest);
	static Vector3* scale(double s, Vector3 v, Vector3* dest);
	static double dot(Vector3 v1, Vector3 v2);
	static Vector3* cross(Vector3 v1, Vector3 v2, Vector3* dest);

	double		x;
	double		y;
	double		z;
};

#endif

